package main

import (
	"chatgpt-service/chat"
	"fmt"
	"os"

	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
	"gopkg.in/yaml.v3"
)

func main() {
	logger := chat.Logger{}
	logger.LoggerInit()

	bs, err := os.ReadFile("config.yaml")
	if err != nil {
		err = fmt.Errorf("[错误] 读取 config.yaml 文件出错: %s", err.Error())
		logger.LogError(err.Error())
		return
	}
	var config chat.Config
	err = yaml.Unmarshal(bs, &config)
	if err != nil {
		err = fmt.Errorf("[错误] chatGPT配置错误请检查yaml配置: %s", err.Error())
		logger.LogError(err.Error())
		return
	}
	if config.ApiKey == "" {
		logger.LogError("[错误] 请填写你openai的key")
		return
	}
	var found bool
	for _, model := range chat.GPTModels {
		if model == config.Model {
			found = true
			break
		}
	}
	if !found {
		logger.LogError("[错误] 没有模块错误")
		return
	}

	api := chat.Api{
		Config: config,
		Logger: logger,
	}
	r := gin.Default()
	if config.Cors {
		// 配置标头，设置跨域
		cfg := cors.DefaultConfig()
		cfg.AllowAllOrigins = true
		cfg.AllowHeaders = []string{"content-type"}
		r.Use(cors.New(cfg))
	}
	groupApi := r.Group("/api")
	// 创建/api路由
	groupApi.Static("/assets", "assets")
	// 静态图片的存放地址
	groupWs := groupApi.Group("/ws")
	// 创建子路由chat
	// groupDb := groupApi.Group("/db")
	// 创建子路由Db
	// groupDb.GET("login", api.WsChat.login)
	groupWs.GET("chat", api.WsChat)
	// 子路由/api/ws/chat 然后调用api.wschat 来处理

	logger.LogInfo("chatGPT server 服务启动....")
	api.InitDB()
	// 初始化数据库连接

	api.Example()
	// 测试数据库连接

	// 后面不执行
	err = r.Run(fmt.Sprintf(":%d", config.Port))
	if err != nil {
		err = fmt.Errorf("启动服务错误: %s", err.Error())
		logger.LogPanic(err.Error())
		return
	}

}
